- Notifications
You must be signed in to change notification settings - Fork 5.8k
/
Copy path90. Subsets II.go
35 lines (32 loc) · 852 Bytes
/
90. Subsets II.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package leetcode
import (
"fmt"
"sort"
)
funcsubsetsWithDup(nums []int) [][]int {
c, res:= []int{}, [][]int{}
sort.Ints(nums) // 这里是去重的关键逻辑
fork:=0; k<=len(nums); k++ {
generateSubsetsWithDup(nums, k, 0, c, &res)
}
returnres
}
funcgenerateSubsetsWithDup(nums []int, k, startint, c []int, res*[][]int) {
iflen(c) ==k {
b:=make([]int, len(c))
copy(b, c)
*res=append(*res, b)
return
}
// i will at most be n - (k - c.size()) + 1
fori:=start; i<len(nums)-(k-len(c))+1; i++ {
fmt.Printf("i = %v start = %v c = %v\n", i, start, c)
ifi>start&&nums[i] ==nums[i-1] { // 这里是去重的关键逻辑,本次不取重复数字,下次循环可能会取重复数字
continue
}
c=append(c, nums[i])
generateSubsetsWithDup(nums, k, i+1, c, res)
c=c[:len(c)-1]
}
return
}